class PresenciaController < ApplicationController

  def list
    conditions = {}
    conditions[:ejecutivo_id] = session[:user]
    
    @presencias = Presencia.paginate :page => params[:page], :per_page => DEFAULT_PER_PAGE, :conditions => conditions, :order => 'id'
    
    if mando_medio?
      conditions = {}
      conditions[:status_id] = 0
      conditions[:reporta_a_id] = session[:user]
      @solicitudes = SolicitudMaterial.find(:all, :conditions => conditions)
    end
    
  end

  def new
    @presencia = Presencia.new
    @presencia.presencia_exhibiciones << PresenciaExhibicion.new
    @presencia.presencia_materiales << PresenciaMaterial.new
    @marcas = Familia.cuervo
    @materiales = Catalogo.find_by_nombre('Material Promociones').entradas_catalogo
    @presupuestos = Catalogo.find_by_nombre('Origen Presupuesto').entradas_catalogo
    @productos = Producto.find(:all, :conditions => {:empresa_id => 1, :status_id => 1})
    @tipos_patrocinio = Catalogo.find_by_nombre('Tipo Patrocinio').entradas_catalogo
    
    ejecutivo = Ejecutivo.find(session[:user])
    @centros = ejecutivo.centros
    
  end

  def show
    @presencia = Presencia.find(params[:id])
    
    @total = 0.0
    @presencia.presencia_materiales.each do |m|
      @total += m.cantidad * m.costo_unitario
    end
    @total_producto = 0.0
    @presencia.presencia_exhibiciones.each do |p|
      @total_producto += p.cantidad * p.costo
    end
    
    if @presencia.solicitud_material.nil? || @presencia.solicitud_material.status_id == 0
      @imprimir = false
      @solicitar = true
    elsif @presencia.solicitud_material.status_id == 2
      @imprimir = false
      @solicitar = false
    else
      @imprimir = true
      @solicitar = false
      @solicitud = @presencia.solicitud_material.id
    end
  end
  
  def index
    list
    
    render :action => "list"
  end
  
  def create
    @presencia = Presencia.new(params[:presencia])
    @presencia.ejecutivo_id = session[:user]
    @presencia.presencia_materiales.delete_if {|m| m.material_id.blank? && m.cantidad.blank? && m.costo_unitario.blank? }
    @presencia.presencia_exhibiciones.delete_if {|e| e.producto_id.blank? && e.cantidad.blank?}
    
    if @presencia.save
      flash[:notice] = "La Presencia se agrego correctamente."
      redirect_to :action => "index"
      
    else
      @presencia.presencia_materiales.delete_if {|m| m.material_id.blank? && m.cantidad.blank? && m.costo_unitario.blank? }
      @presencia.presencia_exhibiciones.delete_if {|e| e.producto_id.blank? && e.cantidad.blank?}
      @presencia.valid?
      
      @marcas = Familia.cuervo
      @materiales = Catalogo.find_by_nombre('Material Promociones').entradas_catalogo
      @presupuestos = Catalogo.find_by_nombre('Origen Presupuesto').entradas_catalogo
      @productos = Producto.find(:all, :conditions => {:empresa_id => 1, :status_id => 1})
      @tipos_patrocinio = Catalogo.find_by_nombre('Tipo Patrocinio').entradas_catalogo
    
      ejecutivo = Ejecutivo.find(session[:user])
      @centros = ejecutivo.centros

      render :action => "new"      
    end
  end
  
  def txt_export
    ejecutivo = Ejecutivo.find(session[:user])
    these_children = find_children_ids(ejecutivo)

    if perfil_nacional?
      @presencias = Presencia.find(:all)
    else
      conditions = {}
      conditions[:ejecutivo_id] = these_children
      @presencias = Presencia.find(:all, :conditions => conditions)
    end
    
    report = StringIO.new
    CSV::Writer.generate(report, ',') do |csv|
      # encabezados
      csv << [
        "No Presencia", "Centro de Consumo", "Nombre", "Marca", "Descripcion",
        "Material", "Cantidad", "Costo Unitario", "Importe", "Descripcion Material"
      ]
      
      @presencias.each do |p|
        p.presencia_materiales.each do |m|
          csv << [
            m.presencia.consecutivo, Centro.find(m.presencia.centro_id).nombre_comercial, m.presencia.nombre, Familia.find(m.presencia.marca_id).nombre, m.presencia.descripcion,
            Catalogo.valor('Material Promociones',m.material_id), m.cantidad, m.costo_unitario, m.importe, m.descripcion
          ]
        end
      end
    end
    report.rewind
    send_data(report.read,
      :type => 'text/csv; charset=iso-8859-1; header=present',
      :filename => 'presencias.csv')

  end
  
  def soporte
    @presencia = Presencia.find(params[:id])
    @soporte_material = SolicitudMaterial.new
    @soporte_material.reporta_a_id = Ejecutivo.find(@presencia.ejecutivo_id).reporta_a_id
    @soporte_material.ejecutivo_id = @presencia.ejecutivo_id
    @soporte_material.centro_id = @presencia.centro_id
    @soporte_material.marca_id = @presencia.marca_id
    @soporte_material.descripcion = @presencia.descripcion
    @soporte_material.nombre = @presencia.nombre
    @soporte_material.presencia_id = @presencia.id
    # soporte de material sin autorizar
    @soporte_material.status_id = 0
    
    importe = 0.0
    @presencia.presencia_materiales.each do |m|
      @soporte_material.solicitud_material_detalles << SolicitudMaterialDetalle.new(
        :material_id => m.material_id, :cantidad => m.cantidad,
        :costo_unitario => m.costo_unitario, :descripcion => m.descripcion)
      importe += (m.costo_unitario * m.cantidad)
    end
    @soporte_material.importe_total = importe
    
    if @soporte_material.save
      flash[:notice] = "La Solicitud de Material se agrego correctamente."
      
      redirect_to :action => "index"
    else
      flash[:error] = "Solicitud de Material no se guardo correctamente..."
      
      render :action => 'show', :id => @presencia
    end
  end
  
  def show_soporte
    @soporte_material = SolicitudMaterial.find(params[:id])
    @centro = Centro.find(@soporte_material.centro_id)
  end
  
  def autorizar_solicitud
    @solicitud = SolicitudMaterial.find(params[:id])
    
    case params[:commit]
    when "Autorizar"
      @solicitud.status_id = 1
    when "Rechazar"
      @solicitud.status_id = 2
      @solicitud.motivo_rechazo = params[:motivo_rechazo]
    end
    
    if @solicitud.save
      flash[:notice] = "Solicitud de Material guardada..."
      
      redirect_to :action => "index"
    else
      
      redirect_to :action => "index"
    end
  end
  
  def imprimir_soporte
    @solicitud = SolicitudMaterial.find(params[:id])
    @centro = Centro.find(@solicitud.centro_id)
    
    render :action => 'imprimir_soporte', :layout =>  false
  end

  def centro_changed
    logger.debug "Params: #{params[:id]}"
    unless params[:id].nil?
      render :partial => 'presupuestos', :locals => {:centro => params[:id]}, :layout => false

    else
      render :text => '<div id="presupuestos">0</div>'
    end
    
  end

  def search
    unless params[:search].blank?
      conditions = ["concatenado LIKE ? AND ejecutivo_id=?",
        "%#{params[:search]}%",
        session[:user]] unless params[:search].nil?
      @presencias = BusquedaPresencia.paginate :page => params[:page], :per_page => DEFAULT_PER_PAGE,
        :order => 'created_at DESC',
        :conditions => conditions
      #      :conditions => Centro.conditions_by_like(params[:search])
      logger.info "Resultado de la busqueda: #{@presencias.size} presencias encontradas"
    else
      list
    end
    render :action =>'search', :layout => true
    
  end
  
  def patrocinio_changed
    logger.debug "Params: #{params[:id]}"
    unless params[:id].nil?
      if params[:id].to_i == 3
        render :update do |page|
          page.hide :exhibiciones 
        end 
      else
        render :update do |page|
          page.show :exhibiciones
        end
      end
    end
  end
end
